Redis 列表(List)

列表在 Redis 中表示可以将数据按顺序排序插入的字符串列表,通常可以包含超过40亿个元素,这启动主要通过 LPUSH 来插入一个或多个到列表头部,以及通过 LRANGE 来获取列表范围

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
127.0.0.1:6379> LPUSH list_key redis
(integer) 1
127.0.0.1:6379> LPUSH list_key mysql
(integer) 2
127.0.0.1:6379> LPUSH list_key sql
(integer) 3
127.0.0.1:6379> LPUSH list_key mongoDB
(integer) 4
127.0.0.1:6379> LPUSH list_key one two
(integer) 6
127.0.0.1:6379> LRANGE list_key 0 10
1) "two"
2) "one"
3) "mongoDB"
4) "sql"
5) "mysql"
6) "redis"
Id Name Info Command
1 LPUSH 将一个或多个值插入到列表头部 (如果 key 不存在则会创建一个) LPUSH list_key mongoDB
2 RPUSH 将一个或多个值插入到表尾部(如果 key 不存在则会创建一个) RPUSH list_key "nice!"
3 LPUSHX key 不存在时不进行任何操作并返回 0,存在的话则将值插入到列表头部 LPUSHX list_key "hello"
4 RPUSHX key 不存在时不进行任何操作并返回 0,存在的话则将值插入到列表尾部 RPUSHX list_keys "world"
5 LINSERT 在指定元素前插入列表数据 LINSERT list_key BEFORE "redis" "redislab.com" (在 redis 前插入 redislab.com)
6 LSET 通过索引替换列表元素(以0开始) LSET list_key 0 "start"(将 索引为0的元素替换为 “start”)
7 LRANGE 在一定范围内获取列表内元素 LRANGE list_key 0 100
8 LINDEX 返回指定索引对应的表内元素(超出范围返回 nill) LINDEX list_key 0
9 BRPOPLPUSH 将指定列表内最后一个元素插入到另外一个列表的头部(如果列表没有元素会阻塞到超时为止,或者发现可以移出的元素为止,单位是秒,需要注意的是如果超时参数是 0 ,那么将会表示阻塞的时间可以无限期延长) BRPOPLPUSH list_key key_name 500
10 LLEN 获取列表的元素数量 LLEN list_key
11 LTRIM 用于修建已经存在列表内的元素(要么从前删除要么从后删除,不可跨越索引) LTRIM list_key -1 -1 (从倒数地一个开始,然后直到倒数第一个,也就是说之保留倒数地一个)
12 BLPOP 移出第一个列表元素,并返回所移出的列表名称和元素 BLPOP list_key 0
13 BRPOP 移出列表最后一个元素,同样返回岁移出的列表名和元素 LRANGE list_key 0 -1
14 LPOP 移出列表中地一个元素(与 BLPOP 的区别是不用设置阻塞时间) LPOP list_key 1
15 LREM 指定一个或多个列表中相同元素进行删除 LREM list_key 1 "sql"

LTRIM


在 Redis 中 LTRIM 主要用于修剪(删除)已经存在的列表内的元素,其中分为 start 以及 stop 以 0 为开始,-1 可以表示列表里面的最后一个元素,-2 表倒数第二个 ……(这适用绝大多数依赖索引所完成的命令,如 RANGE

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
127.0.0.1:6379> LRANGE list_key 0 1000
1) "start"
2) "two"
3) "one"
4) "mongoDB"
5) "sql"
6) "mysql"
7) "redislab.com"
8) "redis"
9) "world"
127.0.0.1:6379> clear

127.0.0.1:6379> LTRIM list_key -1 -1
OK
127.0.0.1:6379> LRANGE list_key 0 100
1) "world"

要么从前删除要么从后删除,不可跨越索引

我们所构造的 -1~-1 翻译到人可以理解的那就是,从倒数地一个开始,然后直到倒数第一个,也就是说之保留倒数地一个,当然你也可以通过 LTRIM list_key -6 -1 从倒数第六到最后一个来进行保留,删除其余外的元素:

1
2
3
4
5
6
7
8
9
127.0.0.1:6379> LTRIM list_key -6 -1
OK
127.0.0.1:6379> LRANGE list_key 0 -1
1) "mongoDB"
2) "sql"
3) "mysql"
4) "redislab.com"
5) "redis"
6) "world"

BLPOP

主要的作用就是移出指定列表中的第一个元素,并返回所移出的元素名称,如果列表没有元素或没有该列表,则会等待超时时间过后即可关闭阻塞,或者得到发现可以移出的元素为止。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
127.0.0.1:6379> LRANGE list_key 0 -1
1) "world"
2) "redis"
3) "redislab.com"
4) "mysql"
5) "sql"
6) "mongoDB"
7) "one"
8) "two"
9) "start"
127.0.0.1:6379> BLPOP list_key 0
1) "list_key"
2) "world"
127.0.0.1:6379> LRANGE list_key 0 -1
1) "redis"
2) "redislab.com"
3) "mysql"
4) "sql"
5) "mongoDB"
6) "one"
7) "two"
8) "start"

LTRIM


LTRIM 与列表中所有的移出命令不同的是,他可以指定一个或多个在列表中相同的元素进行删除。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
127.0.0.1:6379> LPUSH list_key "sql" sql sql
(integer) 6
127.0.0.1:6379> LRANGE list_key 0 -1
1) "sql"
2) "sql"
3) "sql"
4) "redislab.com"
5) "mysql"
6) "mongoDB"
127.0.0.1:6379> LREM list_key 1 "sql"
(integer) 1
127.0.0.1:6379> LRANGE list_key 0 -1
1) "sql"
2) "sql"
3) "redislab.com"
4) "mysql"
5) "mongoDB"

本文使用《江雪分析公开知识存储库知识共享许可证》进行发布